#pragma once
/**
 * 页面管理类
 */
#include "IPage.h"
#include <map>
#include <stack>
#include <vector>
#include <algorithm>

//typedef IPage* (*pCreatePageFun)(void);
//typedef std::map<const char*, pCreatePageFun> PageCreator_MAP;
typedef std::vector<IPage*> PagePool;
typedef std::stack<IPage*> PageStack;

class PageMgr{
public:
	//static PageCreator_MAP* GetCreatorMap();

	// 获取页面池
	static PagePool* GetPool();
	static void PushToPool(IPage* page);

	// 获取页面栈
	static PageStack* GetStack();
	static IPage* GetStackTop(); // 取出栈顶页面
	static IPage* GetStackSecond(); // 获取第二个页面（top之后）
	static void   StackPush(IPage* page);
	static void   StackPop();

	static IPage* GetPoolPage(const char* name);
	static IPage* GetStackPage(const char* name);
};

#define  REGISTER_PAGE(name, ClassPage)\
class _AddFun_##ClassPage{ \
public:\
	_AddFun_##ClassPage(){ \
		if(!PageMgr::GetPoolPage(name)){ \
			IPage* page = new ClassPage(); \
			page->m_name = name; \
			PageMgr::PushToPool(page); \
		}\
	} \
}; \
_AddFun_##ClassPage _gAddFun_##ClassPage;
